Tugas Analisis Multimedia: Audio, Gambar, Video¶
Mata Kuliah: Sistem & Teknologi Multimedia
Nama: Naufal Haris Nurkhoirulloh
NIM: 122140040
Deskripsi Tugas¶
Tugas ini bertujuan untuk memahami representasi dasar data multimedia (audio, gambar, dan video) melalui praktik langsung memuat data, visualisasi, dan ekstraksi informasi fundamental. Anda akan bekerja dengan tiga jenis media berbeda untuk menganalisis karakteristik temporal (audio), spasial (gambar), dan spatio-temporal (video).
Fokus tugas adalah pada pemahaman konsep dasar representasi multimedia dan kemampuan interpretasi hasil visualisasi, bukan pada manipulasi atau transformasi lanjutan data multimedia.
⚠️ CATATAN PENTING: PRESENTASI ACAK & KEJUJURAN AKADEMIK¶
Sebagian mahasiswa akan dipilih secara ACAK untuk presentasi singkat (5-10 menit) menjelaskan kode dan interpretasi hasil mereka. Jika Anda:
- Tidak mampu menjelaskan kode yang Anda kumpulkan
- Hanya menyalin-tempel tanpa pemahaman
- Bergantung sepenuhnya pada AI tanpa memahami konsep
Maka nilai tugas Anda akan diberikan 0 (nol).
Gunakan referensi dan AI sebagai alat bantu pembelajaran, tetapi pastikan Anda memahami setiap baris kode dan dapat menjelaskan logika di baliknya.
# Import Library (Satu-satunya sel kode dalam template ini)
import numpy as np
import matplotlib.pyplot as plt
import librosa
import soundfile as sf
from PIL import Image
import cv2
from IPython.display import Audio, HTML, display
import os
# Set matplotlib untuk menampilkan plot inline
%matplotlib inline
# Tampilkan versi library untuk dokumentasi
print("Library versions:")
print(f"NumPy: {np.__version__}")
print(f"Matplotlib: {plt.matplotlib.__version__}")
print(f"Librosa: {librosa.__version__}")
print(f"OpenCV: {cv2.__version__}")
# Tambahkan import lain jika diperlukan saat mengerjakan tugas
Library versions: NumPy: 2.2.5 Matplotlib: 3.10.6 Librosa: 0.11.0 OpenCV: 4.10.0
Petunjuk Umum Pengerjaan¶
📋 Cara Menggunakan Template¶
- Gunakan notebook ini sebagai kerangka kerja utama
- Tulis penjelasan (markdown) SEBELUM menaruh kode agar maksud dan tujuan jelas
- Tambahkan sel kode di tempat yang sudah disediakan (tandai dengan TODO)
- Semua plot/gambar harus diberi judul, label sumbu, dan keterangan singkat
📊 Standar Visualisasi¶
- Setiap plot harus memiliki judul yang deskriptif
- Label sumbu X dan Y harus jelas
- Gunakan colorbar untuk plot yang memerlukan skala warna
- Berikan interpretasi singkat setelah setiap visualisasi
📂 Struktur Data yang Direkomendasikan¶
- Buat folder
data/di direktori yang sama dengan notebook - Gunakan nama file yang deskriptif (contoh:
audio_musik_piano.wav,gambar_pemandangan_gunung.jpg) - Dokumentasikan sumber data jika menggunakan dataset publik
⚠️ Larangan¶
- Jangan menaruh seluruh pekerjaan dalam satu sel kode yang sangat panjang
- Jangan menempel hasil output tanpa interpretasi atau analisis
- Jangan bergantung sepenuhnya pada AI - pahami dan kuasai kode Anda
🎯 Persiapan Presentasi Acak¶
- Pastikan Anda memahami setiap baris kode yang ditulis
- Latih menjelaskan logika dan alur pemikiran Anda
- Siapkan penjelasan untuk setiap visualisasi dan interpretasinya
Checklist Kelengkapan (Centang ✅ saat selesai)¶
🎵 Bagian Audio¶
- [✅] Muat audio dan tampilkan metadata (durasi, sample rate, jumlah kanal)
- [✅] Tampilkan waveform dengan label sumbu yang jelas
- [✅] Tampilkan spectrogram dalam skala log-dB dengan colorbar
- [✅] Tampilkan MFCC (minimal 13 koefisien) sebagai heatmap
- [✅] Berikan interpretasi dan analisis untuk setiap visualisasi audio
🖼️ Bagian Gambar¶
- [✅] Tampilkan gambar dengan benar dalam format RGB
- [✅] Tampilkan informasi dasar (dimensi, jumlah kanal, dtype)
- [✅] Tampilkan histogram warna untuk channel R, G, B
- [✅] Berikan analisis hubungan histogram dengan kesan visual gambar
📹 Bagian Video¶
- [✅] Tampilkan metadata video (resolusi, fps, frame count, durasi)
- [✅] Tampilkan 3 frame representatif (awal, tengah, akhir)
- [✅] Konversi BGR ke RGB dengan benar untuk visualisasi
- [✅] Analisis kesesuaian parameter video dengan use case
📝 Analisis & Dokumentasi¶
- [✅] Setiap bagian memiliki interpretasi dan analisis ringkas
- [✅] Perbandingan representasi ketiga jenis media
- [✅] Kesimpulan pembelajaran dan refleksi
- [✅] Semua sumber data dan referensi dicantumkan
Pendahuluan¶
Apa itu Data Multimedia?¶
Data multimedia adalah informasi yang dikodekan dalam berbagai format untuk merepresentasikan dunia nyata:
Audio (1D): Sinyal satu dimensi yang berubah terhadap waktu
- Contoh: musik, suara, speech
- Representasi: amplitudo vs waktu
Gambar (2D): Matriks nilai intensitas dalam ruang dua dimensi
- Contoh: foto, ilustrasi, grafik
- Representasi: intensitas pixel pada koordinat (x,y)
Video (2D + Waktu): Rangkaian frame (gambar) yang ditampilkan berurutan
- Contoh: film, rekaman, animasi
- Representasi: frame berubah terhadap waktu dengan frame rate tertentu
Tujuan Tugas¶
Memahami representasi dasar dan teknik visualisasi fundamental untuk setiap jenis media multimedia, termasuk:
- Cara memuat dan membaca file multimedia
- Ekstraksi informasi metadata yang penting
- Visualisasi yang informatif dan mudah dipahami
- Interpretasi hasil analisis secara kontekstual
Cara Kerja¶
- Isi setiap bagian sesuai instruksi yang diberikan
- Tambahkan sel kode di tempat yang ditandai dengan "TODO"
- Berikan interpretasi dan analisis setelah setiap visualisasi
- Pastikan semua plot memiliki judul, label, dan keterangan yang jelas
Bagian A — Audio¶
A1. Deskripsi Data¶
TODO: Jelaskan audio yang akan Anda analisis:
- Jenis audio: Suara hujan dengan gemuruh petir
- Sumber: Dataset Publik (freesound.org)
- Format file: WAV
- Alasan pemilihan: Karena saya merasa suara ini menarik untuk dilihat analisisnya dan saya cukup penasaran
Path file: data\rain&thunder.wav
A2. TODO: Muat & Metadata¶
Instruksi: Tulis kode untuk memuat file audio dan menampilkan metadata dasar:
- Sample rate (Hz)
- Durasi (detik)
- Jumlah kanal (mono/stereo)
- Jumlah total sampel
Catatan: Jika file MP3 bermasalah saat loading, gunakan format WAV sebagai alternatif.
# Muat file audio dan tampilkan metadata dasar
audio_path = os.path.join('data', 'rain&thunder.wav')
# Membaca audio (y: array amplitudo, sr: sample rate)
y, sr = librosa.load(audio_path, sr=None, mono=False) # mono=False agar bisa deteksi jumlah kanal
# Jika y 1D: mono, jika 2D: stereo/multi-channel
if y.ndim == 1:
num_channels = 1
channel_info = 'Mono'
total_samples = y.shape[0]
else:
num_channels = y.shape[0]
channel_info = f'Stereo ({num_channels} channels)' if num_channels == 2 else f'{num_channels} channels'
total_samples = y.shape[1]
duration_sec = total_samples / sr
print(f"Path file : {audio_path}")
print(f"Sample rate : {sr} Hz")
print(f"Durasi : {duration_sec:.2f} detik")
print(f"Jumlah kanal : {channel_info}")
print(f"Total sampel : {total_samples}")
Path file : data\rain&thunder.wav Sample rate : 96000 Hz Durasi : 27.07 detik Jumlah kanal : Stereo (2 channels) Total sampel : 2598291
A3. TODO: Waveform¶
Instruksi: Plot waveform audio dengan:
- Sumbu X: waktu (detik)
- Sumbu Y: amplitudo
- Judul dan label sumbu yang jelas
Analisis yang diperlukan: Jelaskan apa yang Anda lihat dari waveform (pola amplitudo, bagian keras/pelan, dll.)
Analisis pola amplitudo:
Saya melihat perbedaan pola amplitudo pada kanal kanan dan kiri,
- detik 0-9 terlihat kalau amplitudo keduanya itu relatif rendah dan stabil walaupun tidak sama persis antara keduanya, nah ini adalah suara ambience hujan makanya dia rendah dan stabil.
- detik 9-17 terlihat kalau amplitudonya mulai melonjak tinggi dan tajam karena disinilah suara gemuruh petirnya, puncak tertinggi amplitudonya itu pada detik 12-13 di kanal kiri hampir mencapai 0.6 sedangkan di kanal kanan hanya sekitar 0.4
- detik 17-27 amplitudo kembali ke level rendah yang stabil mirip seperti awal yakni suara hujan. Nah saya penasaran kenapa di kanal kanan dan kiri itu berbeda ya, mungkin karena saat merekam suara tersebut kemungkinan besar mikrofon kanal kiri lebih dekat dengan sumber suara (petir) dibanding mikrofon kanan.
# Plot waveform audio untuk masing-masing kanal (stereo)
fig, axs = plt.subplots(num_channels, 1, figsize=(12, 4 * num_channels), sharex=True)
# Buat array waktu (detik)
times = np.arange(total_samples) / sr
channel_names = ['Kanal Kiri (Left)', 'Kanal Kanan (Right)'] if num_channels == 2 else ['Mono']
for i in range(num_channels):
ax = axs[i] if num_channels > 1 else axs
ax.plot(times, y[i] if num_channels > 1 else y, color='C0')
ax.set_ylabel('Amplitudo')
ax.set_title(f'Waveform Audio - {channel_names[i]}')
ax.grid(True)
axs[-1].set_xlabel('Waktu (detik)')
plt.tight_layout()
plt.show()
# Tampilkan pemutar audio
display(Audio(audio_path))